package com.riteny.util.exception.handler;

import com.riteny.util.exception.entity.CommonException;
import com.riteny.util.exception.entity.RestResponseTemplate;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author Riteny
 * 2021/9/10  16:36
 */
public interface CustomExceptionHandler<E extends CommonException> {

    /**
     * 該方法主要用於統一處理類攔截到繼承CommonException 的 自定義異常對象時
     * 判斷是否擁有需要個性化處理的流程
     * <p>
     * 該方法在判斷攔截到的類型符合時，返回true
     * <p>
     * 統一異常處理類會調用
     * {@link CustomExceptionHandler#afterHandler(HttpServletRequest, HttpServletResponse, RestResponseTemplate, CommonException)}
     * 進行個性化處理
     *
     * @param exception
     * @return
     */
    boolean isInstanceOfCustomException(CommonException exception);

    /**
     * 在捕獲到異常之前，需要做的操作
     *
     * @param exception 異常信息
     */
    void afterHandler(HttpServletRequest request, HttpServletResponse response, RestResponseTemplate<String> errorResponse, E exception);

    /**
     * 在處理異常之後，需要做的操作
     *
     * @param request   request
     * @param response  response
     * @param exception 異常信息
     */
    void beforceHandler(HttpServletRequest request, HttpServletResponse response, E exception);
}
